A storage system usually has a variety of storage components to provide responses with different response time for input/output (I/O) requests from an upper layer application. For example, a storage system usually has a cache and a plurality of storage disks which can be organized into a disk array. The cache can be used to cache data in a dynamic random access memory (DRAM), for example, so as to provide a faster response for an I/O request. In comparison, the disk array can be used to respond to an I/O request for data not cached in the cache and such response typically has relatively long response time.
When a disk in the disk array fails, a spare disk in the disk array group that the failed disk belongs to is usually required to rebuild the failed disk (namely, restore data in the failed disk into the spare disk). During this rebuilding process, it is still possible for this storage system to receive a random I/O request for the failed disk array group from the upper layer application. A large amount of such random I/O requests may cause the rebuilding process to slow down, or even break off. In this case, if a failure occurs in another disk in the disk array group, data loss might happen.